const express = require("express");
const cors = require("cors");
const multer = require("multer");
const path = require("path");
const app = express();
app.use(cors());

// 设置文件存储配置
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, "public/images"); // 指定上传的文件存储路径
  },
  filename: (req, file, cb) => {
    const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9);
    cb(
      null,
      file.fieldname + "-" + uniqueSuffix + path.extname(file.originalname)
    ); // 生成唯一文件名
  },
});

// 初始化 multer
const upload = multer({
  storage: storage,
  fileFilter,
  limits: {
    fileSize: 10 * 1024 * 1024, // 限制单个文件大小为 1KB
    files: 5, // 限制上传文件数量为 5
  },
});

app.post("/uploadFiles", upload.single("file"), function (req, res) {
  res.status(200).json({
    message: "图片上传成功",
    file: req.file, // 上传的文件信息
  });
});

// file
// {
//     fieldname: 'file',
//     originalname: '5.jpg',
//     encoding: '7bit',
//     mimetype: 'image/jpeg'
//   }

// req通常不用
// req.file：在上传文件时，multer 会将文件信息存储在
// req.file 中。这个属性在 fileFilter 中不可用，但在上传处理函数中可用。
function fileFilter(req, file, cb) {
  //   console.log(file);
  if (file.originalname.includes("png")) {
    cb(new Error("仅允许上传jpg图片文件！"), false); // 不允许上传，传递错误信息
  } else {
    cb(null, true);
  }
}
app.use((error, req, res, next) => {
  if (error instanceof multer.MulterError) {
    // 发生错误
    res.send({ message: error, status: 502 });
  } else if (error) {
    // 发生错误
    res.send({ message: error, status: 500 });
  }
});
app.listen(3000);
